package com.ctshk.rpc.season.service;

import com.ctshk.common.dto.Result;
import com.ctshk.common.model.PageResponse;
import com.ctshk.common.model.TokenUser;
import com.ctshk.rpc.season.dto.*;
import com.ctshk.rpc.season.req.*;

import java.time.LocalDate;
import java.util.List;

public interface ISeasonFixedProductService {
    /* @MethodName: 保存固定套票基本信息
     * @Description: TODO
     * @Param:
     * @Return:
     * @Author: 杨林
     * @Date:2021/3/8 16:07
     **/
    Result addSeasonFixedProduct(TokenUser user, SeasonFixedBaseReq seasonFixedBaseReq);

    /* @MethodName: 检查固定套票产品编号是否重复
     * @Description: TODO
     * @Param:
     * @Return:
     * @Author: 杨林
     * @Date:2021/3/8 16:57
     **/
    Result checkFixedSeasonProductCode(TokenUser user, String code);

    /* @MethodName: 保存固定套票补充信息
     * @Description: TODO
     * @Param:
     * @Return:
     * @Author: 杨林
     * @Date:2021/3/9 11:10
     **/
    Result addSeasonFixedProductReplenish(SeasonFixedReplenishReq seasonFixedReplenishReq);


    /* @MethodName: 获取固定套票详情信息
     * @Description: TODO
     * @Param:  user  用户  productId
     * @Return:
     * @Author: 杨林
     * @Date:2021/3/10 17:07
     **/
    Result getFixedSeasonProductDetails(TokenUser user, Long productId);

    Result getFixedSeasonProductDetails(Long productId);

    /* @MethodName: 查询 固定套票列表
     * @Description: TODO
     * @Param:
     * @Return:
     * @Author: 杨林
     * @Date:2021/3/11 16:34
     **/
    PageResponse<FixedSeasonProductPageDTO> searchSeasonFixedProduct(SearchFixedProductReq searchFixedProductReq, TokenUser user);

    /* @MethodName: 操作 固定套票
     * @Description: TODO
     * @Param:
     * @Return:
     * @Author: 杨林
     * @Date:2021/3/12 11:48
     **/
    Result updateFixedSeasonProductState(TokenUser user, SeasonFixedProductStateReq req);

    /* @MethodName: 编辑 固定套票信息
     * @Description: TODO
     * @Param:
     * @Return:
     * @Author: 杨林
     * @Date:2021/3/12 17:20
     **/
    Result updateFixedSeason(TokenUser user, SeasonFixedReq req);


    /* @MethodName: 上架或者下架 产品
     * @Description: TODO
     * @Param:
     * @Return:
     * @Author: 杨林
     * @Date:2021/3/16 11:14
     **/
    void onShelfProduct(Long productId, int stateCode);


    /* @MethodName: 获取固定套票 打包产品的成本价
     * @Description: TODO
     * @Param:
     * @Return:
     * @Author: 杨林
     * @Date:2021/3/20 11:16
     **/
    PackageProductCostDTO getPackageProduct(String seasonPackageProductFlag, Long packageId, LocalDate queryDate, Integer travelDays, Integer travelNights, Long userId, Integer channelType);


    /* @MethodName: 根据id 获取产品信息
     * @Description: TODO
     * @Param:
     * @Return:
     * @Author: 杨林
     * @Date:2021/3/24 13:45
     **/
    FixedSeasonDetailsDTO getFixedProductBaseDTO(Long productId);


    /* @MethodName: 固定套票 流程审核
     * @Description: TODO
     * @Param:
     * @Return:
     * @Author: 杨林
     * @Date:2021/4/2 14:48
     **/
    Result flowCheckFixedSeason(TokenUser user, FlowCheckFixedSeasonReq req);


    /* @MethodName: 套票出行日历
     * @Description: TODO
     * @Param:
     * @Return:
     * @Author: 杨林
     * @Date:2021/4/2 16:34
     **/
    List<DepartCalendarDTO> getDepartCalendarDTOList(Long productId, LocalDate startDate, LocalDate endDate, FixedSeasonDetailsDTO detailsDTO, Integer channelType, Long relId);

    PageResponse<FixedSeasonProductPageDTO> getEmployCouponCodeSeason(SearchFixedProductReq req, TokenUser user);

    /* @MethodName: 根据ids 获取套票信息
     * @Description: TODO
     * @Param:
     * @Return:
     * @Author: 杨林
     * @Date:2021/4/22 16:15
     **/
    List<FixedSeasonProductPageDTO> getSeasonProductList(String ids);


    /* @MethodName: 首页 固定套票产品列表信息
     * @Description: TODO
     * @Param:
     * @Return:
     * @Author: 杨林
     * @Date:2021/3/12 17:20
     **/
    Result<HomePageAppDTO> onLineSeasonHomePage(Long userId, AppSearchFixedProductReq req);

    /**
     * 固定套票 缓存初始化
     *
     * @return
     */
    Result searchInit(SearchFixedProductReq req);

    /**
     * 固定套票 缓存更新
     *
     * @param seasonProductCacheUpDTOS
     * @return
     */
    Result upElasticSearch(List<FixedSeasonDetailsDTO> seasonProductCacheUpDTOS);


    /* @MethodName: 搜索线上 固定套票产品列表信息
     * @Description: TODO
     * @Param:
     * @Return:
     * @Author: 杨林
     * @Date:2021/3/12 17:20
     **/
    Result<PageResponse<AppFixedSeasonProductDTO>> onLineSeasonSearch(Long userId, AppSearchFixedProductReq req);

    /**
     * 查询套票包含单项的类型和出发地,目的地
     * @param productId
     * @return
     */
    FixedSeasonProductCertificatesDTO getPackageProductByProductId(Long productId);
}
